package com.bit继承多态.demo1;



class OuterClass{
//普通成员变量
    public int data1 = 10;
    private int data2 = 20;
    public static int data3 = 30;

    /**
     * 实例内部类
     * 1、如何实例化内部类对象
     * 外部类名.内部类名（拿到内部类的类型）  变量 = 外部类对象的引用.new InnerClass();
     * 2、实例内部类当中不能定义静态的成员变量？
     * public static final int data6 = 60;//静态成员加final变常量  编译的时候 值已经确定（必须是static final的）
     *3、实例内部类当中，如果有成员变量和外部类的成员变量重名了？怎么办？
     * 优先使用自己的
     * 如何拿到外部类的呢？
     * System.out.println("&&&&&&&&&"+OuterClass.this.data1);
     * 意识到了：实例内部类当中不仅包含自己的this，还包含  外部类的 this
     * 4、不能包含静态方法
     */
    class InnerClass{
        public int data1 = 1000;
        public  int data4 = 40;
        private int data5 = 50;
        public static final int data6 = 60;//静态成员加final变常量

        /**
         * InerClass的构造方法
         */
        public InnerClass(){
            System.out.println("InerClass的构造方法");
        }
        public void method(){
            System.out.println("InerClass的一个method方法");
            System.out.println("》》》》》》》"+data1);
            System.out.println("&&&&&&&&&"+OuterClass.this.data1);
        }
    }

    public void methodOut() {
        System.out.println(data1);
        InnerClass innerClass = new InnerClass();
        System.out.println(innerClass.data1);
    }

}



public class TestDemo {

    public static void main(String[] args) {
        OuterClass outerClass = new OuterClass();
        outerClass.methodOut();
        System.out.println("===============");

        //外部类名.内部类名（拿到内部类的类型）  变量 = 外部类对象的引用.new InnerClass();
        OuterClass.InnerClass innerClass = outerClass.new InnerClass();
        innerClass.method();
    }

    public static void main1(String[] args) {
        OuterClass outerClass = new OuterClass();
        System.out.println(outerClass.data1);
        OuterClass.InnerClass innerClass2 = new OuterClass().new InnerClass();
        //System.out.println(innerClass.data4);
        //匿名对象，一般是用在 只用一次的情况
        //System.out.println(new OuterClass().data1);
    }
}
